package com.rem.designPattern.factory工厂方法.simpleFactory;

/**
 * 简单工厂
 * 简单工厂不是一种设计模式，反而比较像是一种编程习惯
 * <p>
 * 将client与coffee解偶，降低了客户代码修改的可能性，更加容易扩展
 * 增加新的咖啡时，需要修改工厂类的代码，违背了“开闭原则”。
 *
 * @author Rem
 * @date 2022-11-14
 */
public class SimpleCoffeeFactory {

    public Coffee createCoffee(String type) {
        Coffee coffee;
        if ("american".equals(type)) {
            coffee = new AmericanCoffee();
        } else if ("latte".equals(type)) {
            coffee = new LatteCoffee();
        } else {
            throw new RuntimeException("对不起，您所点的咖啡没有");
        }
        return coffee;
    }

    /**
     * 扩展 静态工厂
     * 不需要创建工厂对象  直接获取产品
     *
     * @param type
     * @return
     */
    public static Coffee createCoffee2(String type) {
        Coffee coffee;
        if ("american".equals(type)) {
            coffee = new AmericanCoffee();
        } else if ("latte".equals(type)) {
            coffee = new LatteCoffee();
        } else {
            throw new RuntimeException("对不起，您所点的咖啡没有");
        }
        return coffee;
    }
}